package com.lfb.collection;

import java.util.*;

public class SetTestDriver {
    public static void main(String[] args) {
        testSet01();
//        testSet02();
//        testSet03();
    }

    /**
     * Set集合的使用：LinkedHashSet
     *                无序
     *                不重复
     *                不为null
     */
    private static  void testSet03(){
        // 创建一个Set实现类的实例对象
        // 多态（父类指代子类）
        // 面向接口的编程
        Set set0 = new TreeSet(); // 原始初始化长度为16
        // 向Set集合中添加元素
        set0.add("zhangsan");
        set0.add("lisi");
        set0.add("lisi");
        // set0.add(null);
        set0.add("wangwu");
        set0.add("dishini");
        System.out.println("使用迭代器进行遍历：");
        // 遍历Set集合中的元素，并进行输出
        // 使用迭代器进行迭代遍历
        // 获取HashSet的迭代器对象
        Iterator it =  set0.iterator();
        // 使用hasNext方法判断有没有可以迭代遍历的元素，
        // 如果为true，则说明还有元素，可以继续迭代遍历
        while(it.hasNext()){
            // 使用迭代器的Next方法获取当前遍历的元素对象
            // 因为迭代器是从第一个元素之前的位置开始进行迭代判定
            Object obj = it.next();
            // 输出取出的元素内容
            System.out.println("  "+ (obj == null ?"null":obj.toString()));
        }

        System.out.println("使用增强型的for循环进行遍历：");
        // 执行流程：使用临时遍历obj从集合对象set0中依次取出元素对象，不用担心越界问题
        int count= 0; // 手动计数器
        for (Object obj:set0) {
            // 取出当前遍历的元素对象
            String strObj = obj == null ?"null":obj.toString();
            System.out.println("  "+ strObj);
            // 自定义计数器
            count++;
        }
    }

    /**
     * set集合的使用：LinkedHashSet
     *                  允许为空
     *                  有序
     */
    private static void testSet02(){
        //创建一个Set实现类的实例对象
        //多态（父类指代子类）
        //面向接口的编程
        Set set0 = new LinkedHashSet();//原始初始化长度16
        //向set集合中添加元素
        set0.add("zhangsan");
        set0.add("lisi");
        set0.add("lisi");
        set0.add(null);
        set0.add("wangwu");
        set0.add("zhaoliu");
        System.out.println("使用迭代器进行遍历");
        //遍历set集合中的元素并输出
        //使用迭代器进行迭代遍历
        ///获取Hash Set的迭代器对象
        Iterator it = set0.iterator();
        //使用hasNext方法判断有没有可以迭代遍历的元素
        //如果为true，说明还有元素，可以继续迭代遍历
        while(it.hasNext()){
            //使用迭代器的Next方法获取当前遍历的元素对象
            //因为迭代器是从第一个元素之前的位置开始进行迭代判定
            Object obj = it.next();
            //输出取出的元素内容
            System.out.println("   " + (obj  == null?"null":obj.toString()));
        }
        System.out.println("使用增强型的for循环进行遍历");
        //执行流程：使用临时遍历obj从集合对象set()中依次取出元素对象，不用担心越界问题
        int count = 0;//手动计数器
        for (Object obj:set0) {
            // 取出当前遍历的元素对象
            String strObj = obj == null ?"null":obj.toString();
            System.out.println("  "+ strObj);
            // 自定义计数器
            count++;
        }
    }

    /**
     * set集合的使用：HashSet
     *                允许为null
     *                不重复
     *                无序
     *                排序
     */
    private static void testSet01(){
        //创建一个Set实现类的实例对象
        //多态（父类指代子类）
        //面向接口的编程
        /**
         * HashSet元素内容不允许重复
         *        允许为null
         */
        Set set0 = new HashSet();//原始初始化长度16加载因子为0.75
        //向set集合中添加元素
        set0.add("zhangsan");
        set0.add("lisi");
        set0.add("lisi");
        set0.add(null);
        set0.add("wangwu");
        set0.add("dishini");
        //遍历set集合中的元素并输出
        //使用迭代器进行迭代遍历
        ///获取Hash Set的迭代器对象
        Iterator it = set0.iterator();
        //使用hasNext方法判断有没有可以迭代遍历的元素
        //如果为true，说明还有元素，可以继续迭代遍历
        while(it.hasNext()){
            //使用迭代器的Next方法获取当前遍历的元素对象
            //因为迭代器是从第一个元素之前的位置开始进行迭代判定
            Object obj = it.next();
            //输出取出的元素内容
            System.out.println("   " + (obj  == null?"null":obj.toString()));
        }
        System.out.println("使用增强型的for循环进行遍历");
        //执行流程：使用临时遍历obj从集合对象set()中依次取出元素对象，不用担心越界问题
        int count = 0;//手动计数器
        for (Object obj:set0) {
            // 取出当前遍历的元素对象
            String strObj = obj == null ?"null":obj.toString();
            System.out.println("  "+ strObj);
            // 自定义计数器
            count++;
        }
    }
}
